package day12;
//volatile可见性
public class Demo {
    public static void main(String[] args) {
        new Visi1().start();
        new Visi2().start();
    }
}
class User{
    //volatile修饰变量 可以让该变量 提供可见性
    //可以在不同得线程中可见
    //原因在于每个线程都有自己得工作内存,多个线程之间
    //还有一个主内存
    //只要被volatile修饰得变量 被其他人修改了
    // 就会让其他线程工作内存得值失效
    //强制性 刷新主内存得值
    // 类似于static(保证对象共享) volatile(保证线程中得共享)
    static volatile int money=100000;
}
class Visi1 extends Thread{
    //检测余额是否发生变化
    public void run() {
        while(User.money==100000){
            //每次打印都是通过main(主内存) 所以有线程改变了
            //让主内存更新 该线程肯定可以识别
            //System.out.println(User.money);
        }
        System.out.println("我得余额发生了变化");
    }
}
class Visi2 extends Thread{
    //3秒之后修改余额
    public void run() {
        try {
            Thread.sleep(3000);
            User.money=50000;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}